package com.shujia.wyh.day21;

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

/*
        "aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)

       分析：
            1、定义一个字符串（写完之后可以升级成键盘录入）
            2、定义一个TreeMap集合对象（考虑自然还是比较器排序）
                    键：Character
                    值：Integer
            3、将字符串转化成字符数组
            4、遍历字符数组得到每一个字符
            5、拿着这个字符去集合中找，找看看有没有这个字符作为键存在的，看返回值是什么
                是null,说明集合中还没有该字符作为键存在，就把该字符作为键，value设置为1存储
                不是null，说明该键已经存在了，把value取出来，加1，重新存储到集合中。
            6、使用StringBuffer做字符串拼接
            7、遍历集合，获取到键和值，按照对应的输出格式进行输出
            8、将StringBuffer转成String输出

      输入："aababcabcdabcde"
      输出：a(5)b(4)c(3)d(2)e(1)
 */
import java.util.Scanner;
public class TreeMapTest1 {
    public static void main(String[] args) {

        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        //1、定义一个字符串（写完之后可以升级成键盘录入）
//        String s = "aababcabcdabcde";
        System.out.println("请输入要统计的字符串：");
        String s = sc.next();


        //2、定义一个TreeMap集合对象
        TreeMap<Character, Integer> map = new TreeMap<>();

        //3、将字符串转化成字符数组
        char[] chars = s.toCharArray();

        //4、遍历字符数组得到每一个字符
        for (char c : chars) {
            //5、拿着这个字符去集合中找，找看看有没有这个字符作为键存在的，看返回值是什么
            Integer value = map.get(c);

            //是null,说明集合中还没有该字符作为键存在，就把该字符作为键，value设置为1存储
            if (value == null) {
                map.put(c, 1);
            } else {
                //不是null，说明该键已经存在了，把value取出来，加1，重新存储到集合中。
                value++;
                map.put(c, value);
            }
        }

        //6、使用StringBuffer做字符串拼接
        StringBuffer sb = new StringBuffer();

        //7、遍历集合，获取到键和值，按照对应的输出格式进行输出
        Set<Map.Entry<Character, Integer>> entries = map.entrySet();
        for (Map.Entry<Character, Integer> keyValue : entries) {
            Character key = keyValue.getKey();
            Integer value = keyValue.getValue();
            sb.append(key).append("(").append(value).append(")");
        }

        //8、将StringBuffer转成String输出
        String result = sb.toString();
        System.out.println("统计的结果为：");
        System.out.println(result);
    }
}
